home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Sounds Terrific 2
/
Sounds Terrific II (1996)(Weird Science)(Disc 1 of 2)[Amiga-PC].iso
/
archives
/
amiga
/
tracker_4_31.lzh
/
tracker
/
Amiga
/
info.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-02-14
|
2KB
|
97 lines
/* amiga/info.c
vi:ts=3 sw=3:
*/
/* $Id: info.c,v 1.2 1995/02/14 16:51:22 espie Exp espie $
* $Log: info.c,v $
* Revision 1.2 1995/02/14 16:51:22 espie
* *** empty log message ***
*
* Revision 1.1 1995/01/13 13:31:35 espie
* Initial revision
*
*/
#include <proto/exec.h>
#include "defs.h"
#include "extern.h"
#include "amiga/amiga.h"
ID("$Id: info.c,v 1.2 1995/02/14 16:51:22 espie Exp espie $")
/***
***
*** Info window handling
***
***/
/* We chose the easy way: outputting everything in a console window
* on the fly. An interesting improvement would be to buffer everything
* and open the window with the right size afterwards
*/
struct handle
{
FILE *file;
int linecount;
int maxlength;
int currentlength;
};
#define H(h, field) ( ((struct handle *)h)->field )
void *begin_info(char *title)
{
struct handle *new;
char buffer[50];
new = malloc(sizeof(struct handle));
if (!new)
return 0;
sprintf(buffer, "CON:////%s/auto/close/wait", title);
new->file=fopen(buffer, "w");
if (!new->file)
{
free(new);
return 0;
}
new->linecount = 0;
new->maxlength = 0;
new->currentlength = 0;
return new;
}
void infos(void *handle, char *s)
{
if (handle)
{
fprintf( H(handle,file), s);
H(handle, currentlength) += strlen(s);
}
}
void info(void *handle, char *line)
{
infos(handle, line);
if (handle)
{
fputc('\n', H(handle, file));
if ( H(handle, currentlength) > H(handle, maxlength) )
H(handle, maxlength) = H(handle, currentlength);
H(handle, linecount)++;
}
}
void end_info(void *handle)
{
if (handle)
{
fclose(H(handle, file));
free(handle);
}
}